home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 007 / yacc.arc / DEXTERN next >
Text File  |  1985-09-04  |  7KB  |  261 lines

  1. # include <stdio.h>
  2. # include <ctype.h>
  3. # include "files"
  4.  
  5.         /*  MANIFEST CONSTANT DEFINITIONS */
  6.  
  7.         /* base of nonterminal internal numbers */
  8. # define NTBASE 010000
  9.  
  10.         /* internal codes for error and accept actions */
  11.  
  12. # define ERRCODE  8190
  13. # define ACCEPTCODE 8191
  14.  
  15.         /* sizes and limits */
  16.  
  17. # ifdef HUGE
  18. # define ACTSIZE 12000
  19. # define MEMSIZE 12000
  20. # define NSTATES 750
  21. # define NTERMS 127
  22. # define NPROD 600
  23. # define NNONTERM 300
  24. # define TEMPSIZE 1200
  25. # define CNAMSZ 5000
  26. # define LSETSIZE 600
  27. # define WSETSIZE 350
  28. # endif
  29.  
  30. # ifdef MEDIUM
  31. # define ACTSIZE 4000
  32. # define MEMSIZE 5200
  33. # define NSTATES 600
  34. # define NTERMS 127
  35. # define NPROD 400
  36. # define NNONTERM 200
  37. # define TEMPSIZE 800
  38. # define CNAMSZ 4000
  39. # define LSETSIZE 450
  40. # define WSETSIZE 250
  41. # endif
  42.  
  43. # define NAMESIZE 50
  44. # define NTYPES 63
  45.  
  46. # ifdef WORD32
  47. # define TBITSET ((32+NTERMS)/32)
  48.  
  49.         /* bit packing macros (may be machine dependent) */
  50. # define BIT(a,i) ((a)[(i)>>5] & (1<<((i)&037)))
  51. # define SETBIT(a,i) ((a)[(i)>>5] |= (1<<((i)&037)))
  52.  
  53.         /* number of words needed to hold n+1 bits */
  54. # define NWORDS(n) (((n)+32)/32)
  55.  
  56. # else
  57.  
  58. # define TBITSET ((16+NTERMS)/16)
  59.  
  60.         /* bit packing macros (may be machine dependent) */
  61. # define BIT(a,i) ((a)[(i)>>4] & (1<<((i)&017)))
  62. # define SETBIT(a,i) ((a)[(i)>>4] |= (1<<((i)&017)))
  63.  
  64.         /* number of words needed to hold n+1 bits */
  65. # define NWORDS(n) (((n)+16)/16)
  66. # endif
  67.  
  68.         /* relationships which must hold:
  69.         TBITSET ints must hold NTERMS+1 bits...
  70.         WSETSIZE >= NNONTERM
  71.         LSETSIZE >= NNONTERM
  72.         TEMPSIZE >= NTERMS + NNONTERMs + 1
  73.         TEMPSIZE >= NSTATES
  74.         */
  75.  
  76.         /* associativities */
  77.  
  78. # define NOASC 0  /* no assoc. */
  79. # define LASC 1  /* left assoc. */
  80. # define RASC 2  /* right assoc. */
  81. # define BASC 3  /* binary assoc. */
  82.  
  83.         /* flags for state generation */
  84.  
  85. # define DONE 0
  86. # define MUSTDO 1
  87. # define MUSTLOOKAHEAD 2
  88.  
  89.         /* flags for a rule having an action, and being reduced */
  90.  
  91. # define ACTFLAG 04
  92. # define REDFLAG 010
  93.  
  94.         /* output parser flags */
  95. # define YYFLAG1 (-1000)
  96.  
  97.         /* macros for getting associativity and precedence levels */
  98.  
  99. # define ASSOC(i) ((i)&03)
  100. # define PLEVEL(i) (((i)>>4)&077)
  101. # define TYPE(i)  ((i>>10)&077)
  102.  
  103.         /* macros for setting associativity and precedence levels */
  104.  
  105. # define SETASC(i,j) i|=j
  106. # define SETPLEV(i,j) i |= (j<<4)
  107. # define SETTYPE(i,j) i |= (j<<10)
  108.  
  109.         /* looping macros */
  110.  
  111. # define TLOOP(i) for(i=1;i<=ntokens;++i)
  112. # define NTLOOP(i) for(i=0;i<=nnonter;++i)
  113. # define PLOOP(s,i) for(i=s;i<nprod;++i)
  114. # define SLOOP(i) for(i=0;i<nstate;++i)
  115. # define WSBUMP(x) ++x
  116. # define WSLOOP(s,j) for(j=s;j<cwp;++j)
  117. # define ITMLOOP(i,p,q) q=pstate[i+1];for(p=pstate[i];p<q;++p)
  118. # define SETLOOP(i) for(i=0;i<tbitset;++i)
  119.  
  120.         /* I/O descriptors */
  121.  
  122. extern FILE * finput;           /* input file */
  123. extern FILE * faction;          /* file for saving actions */
  124. extern FILE *fdefine;           /* file for # defines */
  125. extern FILE * ftable;           /* y.tab.c file */
  126. extern FILE * ftemp;            /* tempfile to pass 2 */
  127. extern FILE * foutput;          /* y.output file */
  128.  
  129.         /* structure declarations */
  130.  
  131. struct looksets {
  132.         int lset[TBITSET];
  133.         };
  134.  
  135. struct item {
  136.         int *pitem;
  137.         struct looksets *look;
  138.         };
  139.  
  140. struct toksymb {
  141.         char *name;
  142.         int value;
  143.         };
  144.  
  145. struct ntsymb {
  146.         char *name;
  147.         int tvalue;
  148.         };
  149.  
  150. struct wset {
  151.         int *pitem;
  152.         int flag;
  153.         struct looksets ws;
  154.         };
  155.  
  156.         /* token information */
  157.  
  158. extern int ntokens ;    /* number of tokens */
  159. extern struct toksymb tokset[];
  160. extern int toklev[];    /* vector with the precedence of the terminals */
  161.  
  162.         /* nonterminal information */
  163.  
  164. extern int nnonter ;    /* the number of nonterminals */
  165. extern struct ntsymb nontrst[];
  166.  
  167.         /* grammar rule information */
  168.  
  169. extern int nprod ;      /* number of productions */
  170. extern int *prdptr[];   /* pointers to descriptions of productions */
  171. extern int levprd[] ;   /* contains production levels to break conflicts */
  172.  
  173.         /* state information */
  174.  
  175. extern int nstate ;             /* number of states */
  176. extern struct item *pstate[];   /* pointers to the descriptions of the states */
  177. extern int tystate[];   /* contains type information about the states */
  178. extern int defact[];    /* the default action of the state */
  179. extern int tstates[];   /* the states deriving each token */
  180. extern int ntstates[];  /* the states deriving each nonterminal */
  181. extern int mstates[];   /* the continuation of the chains begun in tstates and n
  182. tstates */
  183.  
  184.         /* lookahead set information */
  185.  
  186. extern struct looksets lkst[];
  187. extern int nolook;  /* flag to turn off lookahead computations */
  188.  
  189.         /* working set information */
  190.  
  191. extern struct wset wsets[];
  192. extern struct wset *cwp;
  193.  
  194.         /* storage for productions */
  195.  
  196. extern int mem0[];
  197. extern int *mem;
  198.  
  199.         /* storage for action table */
  200.  
  201. extern int amem[];  /* action table storage */
  202. extern int *memp ;              /* next free action table position */
  203. extern int indgo[];             /* index to the stored goto table */
  204.  
  205.         /* temporary vector, indexable by states, terms, or ntokens */
  206.  
  207. extern int temp1[];
  208. extern int lineno; /* current line number */
  209.  
  210.         /* statistics collection variables */
  211.  
  212. extern int zzgoent ;
  213. extern int zzgobest ;
  214. extern int zzacent ;
  215. extern int zzexcp ;
  216. extern int zzclose ;
  217. extern int zzrrconf ;
  218. extern int zzsrconf ;
  219.         /* define functions with strange types... */
  220.  
  221. extern char *cstash();
  222. extern struct looksets *flset();
  223. extern char *symnam();
  224. extern char *writem();
  225.  
  226.         /* default settings for a number of macros */
  227.  
  228.         /* name of yacc tempfiles */
  229.  
  230. # ifndef TEMPNAME
  231. # define TEMPNAME "yacc.tmp"
  232. # endif
  233.  
  234. # ifndef ACTNAME
  235. # define ACTNAME "yacc.act"
  236. # endif
  237.  
  238.         /* output file name */
  239.  
  240. # ifndef OFILE
  241. # define OFILE "ytab.c"
  242. # endif
  243.  
  244.         /* user output file name */
  245.  
  246. # ifndef FILEU
  247. # define FILEU "youtput"
  248. # endif
  249.  
  250.         /* output file for # defines */
  251.  
  252. # ifndef FILED
  253. # define FILED "ytab.h"
  254. # endif
  255.  
  256.         /* command to clobber tempfiles after use */
  257.  
  258. # ifndef ZAPFILE
  259. # define ZAPFILE(x) unlink(x)
  260. # endif
  261.